﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ControlPresupuesto
{
    public partial class FrmPresupuestoAnualEn3Fases : Form
    {
        private string prefijoCodPresupuesto = "PR";

        private string codPresupuesto = string.Empty;
        public bool publicado = false;
        
        //---esta variable se debe actualizar en el mdi de la aplicacion, en la siguiente varibale se graba la vigencia que se definio en el formulario FrmCrearPresupuestoAnual
        public int vigencia = 0;
        //--- Esta variable se tuliza para realizar el convertir los distintos campos del presupuesto a numero
        public double temp = 0;
        
        public FrmPresupuestoAnualEn3Fases()
        {
            InitializeComponent();
        }

        private void FrmPresupuestoAnualEn3Fases_Load(object sender, EventArgs e)
        {   
            // -- Cargo los rubros
            this.spRubroTableAdapter.Fill(this.controlPresupuestoDataSet.spRubro);

            //----- Cargo los datos para del presupuesto seleccionado.
            this.spPresupuestoAnualEn3FasesTableAdapter.FillBy(
                this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases,
                "CargarDetallePresupuestoEn3Fases",
                null,
                null,
                this.codPresupuesto,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null
                );

            //-- Blanquear Campos
            //Utils.get().blanquearCampos(this);
            
            //-- Agrego un nuevo registro de entrada,sino hay datos
            if (this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases.Rows.Count == 0)
            {
                this.spPresupuestoAnualEn3FasesBindingSource.AddNew();
            }
        }

        public void Mostrar()
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                if (this.Visible)
                {
                    //MessageBox.Show("Actualmente, esta definiendo un presupuesto.\nDebe terminarlo para iniciar uno nuevo.");
                    this.WindowState = FormWindowState.Normal;
                    this.BringToFront();
                    Cursor.Current = Cursors.Default;
                    return;
                }

                //-- antes de definir la estructura del presupuesto, el usuario debe seleccionar (debe crearlo, si es el caso) la vigencia del presupuesto.
                FrmPresupuestoAnualCrear frmCrearPresupuestoAnual = new FrmPresupuestoAnualCrear(this.prefijoCodPresupuesto);
                frmCrearPresupuestoAnual.ShowDialog();
                //-- Si el usuario no seleccionó o creó una vigencia valida, no muesro la ventana que debe definir el presupuesto
                this.vigencia = frmCrearPresupuestoAnual.vigencia;
                if (this.vigencia == 0)
                {
                    Cursor.Current = Cursors.Default;
                    return;
                }

                Cursor.Current = Cursors.WaitCursor;

                //----- Si llego a este punto, el usuario selecciono una vigencia valida

                //--- Inicializo los campos de la ventana
                this.tittle.Text = "Definicion del Presupuesto " + this.vigencia.ToString() + " en Sus 3 Fases" + (frmCrearPresupuestoAnual.publicado ? " (PUBLICADO)" : "") + (frmCrearPresupuestoAnual.activo ? " - ACTIVO" : " - INACTIVO");
                this.codPresupuesto = frmCrearPresupuestoAnual.codPresupuesto;
                this.publicado = frmCrearPresupuestoAnual.publicado;

                this.Show();
                this.BringToFront();
                this.WindowState = ((Utils.get().getValorParametro("MaximizarFormulariosDeLaAplicacion").Equals("SI") ? true : false) ? FormWindowState.Maximized : this.WindowState);

                this.codPresupuestoTextBox.Text = frmCrearPresupuestoAnual.codPresupuesto;
                this.vigenciaTextBox.Text = this.vigencia.ToString();
                
                //-- Cambio el estado de los botones y campos de la ventana, dependiendo de que la vgencia este publicada o no.
                this.DeshabilitarCamposYBotones(frmCrearPresupuestoAnual.publicado);
            }
            catch (Exception ex)
            {
                Cursor.Current = Cursors.Default;
                MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void CalcularPresupuestoPyG_e_Interno()
        {
            try
            {
                if (this.valorPPTOCotecmarTextBox.ForeColor == Color.Red || this.valorPPTOSaldosPCTMARTextBox.ForeColor == Color.Red || this.valorPPTOSaldosVPCTMARTextBox.ForeColor == Color.Red)
                {
                    this.PPTOPyGTextBox.Text = string.Empty;
                    this.PPTOInternoTextBox.Text = string.Empty;
                }

                this.PPTOPyGTextBox.Text = Utils.get().getFormatoMoneda(double.Parse(this.valorPPTOCotecmarTextBox.Text.Trim()) - double.Parse(this.valorPPTOSaldosPCTMARTextBox.Text.Trim()));
                this.PPTOInternoTextBox.Text = Utils.get().getFormatoMoneda(double.Parse(this.valorPPTOCotecmarTextBox.Text.Trim()) - double.Parse(this.valorPPTOSaldosPCTMARTextBox.Text.Trim()) - double.Parse(this.valorPPTOSaldosVPCTMARTextBox.Text.Trim()));

                
            }
            catch (Exception)
            {
                //MessageException.show(ex);
            }
        }

        private void DeshabilitarCamposYBotones(bool publicado)
        {
            this.bindingNavigatorSaveItem.Enabled = !publicado;
            this.bindingNavigatorAddNewItem.Enabled = !publicado;
            this.bindingNavigatorDeleteItem.Enabled = !publicado;
            this.toolStripButton1.Enabled = !publicado;
            //this.adicionarFaltantesToolStripButton.Enabled = !publicado;
            //this.QuitarRubrosEnCeroToolStripButton.Enabled = !publicado;
            this.codRubroBuscadorAWIL.ReadOnly = publicado;
            this.valorPPTOCotecmarTextBox.ReadOnly = publicado;
            this.valorPPTOSaldosPCTMARTextBox.ReadOnly = publicado;
            this.valorPPTOSaldosVPCTMARTextBox.ReadOnly = publicado;
        }

        #region Eventos asociados a los botones del BindingNavigator

        private void exportar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try { Utils.get().exportar(this.spPresupuestoAnualEn3FasesDataGridView); }
            catch (Exception ex) { MessageException.show(ex); }
            Cursor.Current = Cursors.Default;
        }

        private void actualizar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            this.Hide();
            this.Mostrar();
            ManageForms.reloadForm(this);
            this.codPresupuestoTextBox.Text = prefijoCodPresupuesto + this.vigencia.ToString();
            Cursor.Current = Cursors.Default;
        }

        private void Save_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.RemoveSort();
                
                //--- inicializo estos campos para no tener problemas con la validaiion que hace .NET
                this.codPresupuestoTextBox.Text = this.codPresupuesto;
                
                bs.EndEdit();
                //---actualizar la lista
                this.tableAdapterManager.UpdateAll(this.controlPresupuestoDataSet);
                MessageBox.Show("Registros Grabados con Exito!");
                //this.spSeguridadRolTableAdapter.Update(this.controlPresupuestoDataSet.spSeguridadRol);
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void add_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {

                bs.AddNew();
                //--- Cargo el codigo del presupuesto en el campo que corresponde
                this.codPresupuestoTextBox.Text = this.codPresupuesto;

            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
        }

        private void delete_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;

            if (bs.Count == 0)
            {
                return;
            }
            if (MessageBox.Show("¿Desea Borrar el registro?", "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            try
            {
                bs.RemoveCurrent();
                //this.codRolTextBox.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
        }

        private void deshacer_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                foreach (DataTable dt in this.controlPresupuestoDataSet.Tables)
                {
                    if (bs.DataMember.ToString().Contains(dt.TableName))
                    {
                        dt.RejectChanges();
                        bs.CancelEdit();
                        //--- Remuevo el filtro
                        bs.RemoveFilter();
                        this.toolStripTextBox1.Text = string.Empty;

                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filter_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.RemoveFilter();
                this.toolStripTextBox1.Text = string.Empty;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filterText_TextChanged(object sender, EventArgs e)
        {

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripTextBox)sender).GetCurrentParent()).BindingSource;
            DataTable table = ((DataSet)bs.DataSource).Tables[bs.DataMember];
            ToolStripTextBox tb = (ToolStripTextBox)sender;
            try
            {
                String filtro = "";
                foreach (DataColumn cl in table.Columns)
                {
                    filtro += "ISNULL(" + cl.ColumnName.ToString() + ",'')+' '+";
                }
                filtro = filtro.Substring(0, filtro.Length - 5);
                filtro += " like'%" + tb.Text + "%'";
                //MessageBox.Show(filtro);
                bs.Filter = filtro;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void adicionarFaltantesToolStripButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea Agregar los Rubros Faltantes a la Vigencia?", "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            Cursor.Current = Cursors.WaitCursor;
            try
            {
                this.spPresupuestoAnualCabeceraTableAdapter1.FillBy(
                    this.controlPresupuestoDataSet.spPresupuestoAnualCabecera,
                    "AgregarRubrosFaltantesAlPresupuestoEn3Fases",
                    null,
                    null,
                    this.codPresupuesto,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                //----- Cargo los datos para del presupuesto seleccionado.
                this.spPresupuestoAnualEn3FasesTableAdapter.FillBy(
                    this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases,
                    "CargarDetallePresupuestoEn3Fases",
                    null,
                    null,
                    this.codPresupuesto,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                //-- Agrego un nuevo registro de entrada,sino hay datos
                if (this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases.Rows.Count == 0)
                {
                    this.spPresupuestoAnualEn3FasesBindingSource.AddNew();
                }

                MessageBox.Show("Rubros Agregados con Exito!");
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void QuitarRubrosEnCeroToolStripButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea Eliminar los Rubros en $0.00 la Vigencia?", "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            Cursor.Current = Cursors.WaitCursor;
            try
            {
                this.spPresupuestoAnualCabeceraTableAdapter1.FillBy(
                    this.controlPresupuestoDataSet.spPresupuestoAnualCabecera,
                    "EliminarRubrosEnCeroDelPresupuestoEn3Fases",
                    null,
                    null,
                    this.codPresupuesto,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                //----- Cargo los datos para del presupuesto seleccionado.
                this.spPresupuestoAnualEn3FasesTableAdapter.FillBy(
                    this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases,
                    "CargarDetallePresupuestoEn3Fases",
                    null,
                    null,
                    this.codPresupuesto,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                //-- Agrego un nuevo registro de entrada,sino hay datos
                if (this.controlPresupuestoDataSet.spPresupuestoAnualEn3Fases.Rows.Count == 0)
                {
                    this.spPresupuestoAnualEn3FasesBindingSource.AddNew();
                }

                this.codPresupuestoTextBox.Text = this.codPresupuesto;
                MessageBox.Show("Rubros eliminados con Exito!");
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        #endregion

        private void valorPPTOCotecmarTextBox_TextChanged(object sender, EventArgs e)
        {   
            if(double.TryParse(this.valorPPTOCotecmarTextBox.Text.Trim(),out temp) || this.valorPPTOCotecmarTextBox.Text.Trim().Equals(string.Empty))
            {
                this.valorPPTOCotecmarTextBox.ForeColor = Color.Black;
            }
            else
            {
                this.valorPPTOCotecmarTextBox.ForeColor = Color.Red;
                return;
            }

            this.CalcularPresupuestoPyG_e_Interno();
        }

        private void valorPPTOSaldosPCTMARTextBox_TextChanged(object sender, EventArgs e)
        {
            if (double.TryParse(this.valorPPTOSaldosPCTMARTextBox.Text.Trim(), out temp) || this.valorPPTOSaldosPCTMARTextBox.Text.Trim().Equals(string.Empty))
            {
                this.valorPPTOSaldosPCTMARTextBox.ForeColor = Color.Black;
            }
            else
            {
                this.valorPPTOSaldosPCTMARTextBox.ForeColor = Color.Red;
                return;
            }

            this.CalcularPresupuestoPyG_e_Interno();
        }

        private void valorPPTOSaldosVPCTMARTextBox_TextChanged(object sender, EventArgs e)
        {
            if (double.TryParse(this.valorPPTOSaldosVPCTMARTextBox.Text.Trim(), out temp) || this.valorPPTOSaldosVPCTMARTextBox.Text.Trim().Equals(string.Empty))
            {
                this.valorPPTOSaldosVPCTMARTextBox.ForeColor = Color.Black;
            }
            else
            {
                this.valorPPTOSaldosVPCTMARTextBox.ForeColor = Color.Red;
                return;
            }

            this.CalcularPresupuestoPyG_e_Interno();
        }

        private void codPresupuestoTextBox_TextChanged(object sender, EventArgs e)
        {
            //this.codPresupuestoTextBox.Text = this.codPresupuesto;
        }
    }
}
